﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ControleEstoque.Entidades.ControleAtivoDataSetTableAdapters;
using System.Drawing;

public partial class Auth_RegistrarLeitura : System.Web.UI.UserControl, IViewStatePersist
{
	int _ativosNotFound;

	ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoDataTable MovimentacoesLidas
	{
		get
		{
			return this.ViewState["movimentacoesLidas"] as ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoDataTable;
		}
		set
		{
			this.ViewState["movimentacoesLidas"] = value;
		}
	}

	protected void Page_Load(object sender, EventArgs e)
	{
		if (ddlPortalLeitorId.SelectedItem != null)
		{
			PortalLeitorTableAdapter tableAdapter = new PortalLeitorTableAdapter();
			ControleEstoque.Entidades.ControleAtivoDataSet.PortalLeitorDataTable data = tableAdapter.GetDataByPortalLeitorId(int.Parse(ddlPortalLeitorId.SelectedValue));
			if (data.Rows.Count > 0)
			{
				ControleEstoque.Entidades.ControleAtivoDataSet.PortalLeitorRow row = data.Rows[0] as ControleEstoque.Entidades.ControleAtivoDataSet.PortalLeitorRow;
				RangeValidator1.MaximumValue = row.PortalLeitorNumeroAntenas.ToString();
				RangeValidator1.ErrorMessage = "A antena deve estar entre 1 e " + row.PortalLeitorNumeroAntenas + ".";
			}
			else
			{
				txtPortalLeitorAntena.Enabled = false;
			}
		}
	}
	protected void btnLer_Click(object sender, EventArgs e)
	{
		MovimentacaoTableAdapter movimentacaoAdapter = new MovimentacaoTableAdapter();
		MovimentacoesLidas = movimentacaoAdapter.GetDataFromPortalLeitor(int.Parse(ddlPortalLeitorId.SelectedValue), (byte)(byte.Parse(txtPortalLeitorAntena.Text) - 1), ddlMovimentacaoTipo.SelectedValue);
		this.lvMovimentacoesLidas.DataSource = MovimentacoesLidas;
		this.lvMovimentacoesLidas.DataBind();
	}
	protected void lvMovimentacoesLidas_ItemDataBound(object sender, ListViewItemEventArgs e)
	{
		if (e.Item.ItemType == ListViewItemType.DataItem)
		{
			ListViewDataItem item = e.Item as ListViewDataItem;
			ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoRow row = (item.DataItem as DataRowView).Row as ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoRow;

			if (row.AtivoNotFound)
			{
				LinkButton lbCadastrarAtivo = item.FindControl("lbCadastrarAtivo") as LinkButton;
				lbCadastrarAtivo.Visible = true;
				lbCadastrarAtivo.CommandArgument = row.EstoqueLocalizacaoRFID.ToString("N").Substring(0, 8);

				HtmlTableRow trItem = item.FindControl("trItem") as HtmlTableRow;
				trItem.Attributes["class"] = "linha-selecionada";
				_ativosNotFound++;
			}
			else if (row.EstoqueLocalizacaoTamanhoCaixa > 0)
			{
				Label AtivoNomeLabel = item.FindControl("AtivoNomeLabel") as Label;
				AtivoNomeLabel.ForeColor = Color.DarkGray;
			}
		}
	}
	protected void lvMovimentacoesLidas_ItemCommand(object sender, ListViewCommandEventArgs e)
	{
		if (e.CommandName == "CadastrarAtivo")
		{
			IHistoryPage currentPage = this.Page as IHistoryPage;
			Control ativosControl = currentPage.ChangeCurrentControlTo("~/Auth/Ativos.ascx");
			ListView lvAtivo = ativosControl.FindControl("lvAtivo") as ListView;
			lvAtivo.PreRender += delegate(object sender2, EventArgs e2)
			{
				TextBox AtivoRFIDTextBox = lvAtivo.InsertItem.FindControl("AtivoRFIDTextBox") as TextBox;
				AtivoRFIDTextBox.Text = e.CommandArgument.ToString();
			};
		}
	}

	#region IViewStatePersist Members

	public new object SaveViewState()
	{
		return base.SaveViewState();
	}

	public new void LoadViewState(object savedState)
	{
		base.LoadViewState(savedState);
		AtivoTableAdapter ativoAdapter = new AtivoTableAdapter();
		ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable ativoData = ativoAdapter.GetData();

		foreach (ControleEstoque.Entidades.ControleAtivoDataSet.AtivoRow ativo in ativoData)
		{
			var movimentacoesSemAtivos = from row in MovimentacoesLidas where row.AtivoNotFound && row.EstoqueLocalizacaoRFID.ToString("N").StartsWith(ativo.AtivoRFID) select row;

			foreach (ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoRow row in movimentacoesSemAtivos)
			{
				row.AtivoId = ativo.AtivoId;
				row["AtivoNome"] = ativo.AtivoNome;
				row.AtivoNotFound = false;
			}
		}


		this.lvMovimentacoesLidas.DataSource = MovimentacoesLidas;
		this.lvMovimentacoesLidas.DataBind();
	}

	#endregion
	protected void btnRegistrarLeitura_Click(object sender, EventArgs e)
	{
		MovimentacaoTableAdapter movimentacaoAdapter = new MovimentacaoTableAdapter();
		movimentacaoAdapter.Update(MovimentacoesLidas);
	}
	protected void lvMovimentacoesLidas_DataBinding(object sender, EventArgs e)
	{
		_ativosNotFound = 0;
	}
	protected void lvMovimentacoesLidas_DataBound(object sender, EventArgs e)
	{
		TextBox txtAtivosNotFound = lvMovimentacoesLidas.FindControl("txtAtivosNotFound") as TextBox;
		txtAtivosNotFound.Text = _ativosNotFound.ToString();
		btnRegistrarLeitura.Enabled = lvMovimentacoesLidas.Items.Count > 0;
	}
}
